home *** CD-ROM | disk | FTP | other *** search
/ Aminet 46 / Aminet 46 (2001)(GTI - Schatztruhe)[!][Dec 2001].iso / Aminet / text / edit / edt10src.lha / txt / Menus.mod < prev    next >
Text File  |  1995-04-09  |  3KB  |  148 lines

  1. (*
  2.   .name         Menus
  3.   .task         arexx commands for creating menus
  4.   .release      1.0
  5.   .language     Oberon-2
  6.   .translator   Amiga Oberon 3.2
  7.   .system req.  AmigaOS 2.04 or higher
  8.   .author       Joachim Barheine
  9.   .address      Hochgrevestr. 3, 38640 Goslar
  10.   .copyright    (c) 1995 by J.Barheine
  11. *)
  12.  
  13. (* .info: 31/03/95, 16:40:04, version 1 *)
  14.  
  15. MODULE Menus;
  16.  
  17. IMPORT
  18.   SYS:= SYSTEM,
  19.  
  20.   CN:= CmdNodes,
  21.   IO:= IOServer,
  22.   K:= Kernel,
  23.   Key:= Keymapping,
  24.   Rx:= ERexx,
  25.   S:= Strings,
  26.   Str:= StrPool,
  27.   Util:= Utility,
  28.   W:= Windows;
  29.  
  30. VAR
  31.   menuInfo: K.DynArray;
  32.   iconsItem-, insertItem-, wordWrapItem-, autoIndentItem-, cleanLinesItem-: INTEGER;
  33.  
  34. PROCEDURE* DoMenu(w: IO.Window; id: INTEGER): SHORTINT;
  35.  
  36. VAR
  37.   n: CN.CmdNode;
  38.  
  39. BEGIN
  40.   n:= menuInfo.Get(id)(CN.CmdNode);
  41.   IF CN.ExecRexx(w(W.Window), n.string^, n.isFile) THEN
  42.     RETURN CN.HandleRexx(w(W.Window));
  43.   ELSE
  44.     RETURN IO.msgLocal;
  45.   END;
  46. END DoMenu;
  47.  
  48. PROCEDURE Register(id: INTEGER; cmdStr: ARRAY OF CHAR);
  49.  
  50. VAR
  51.   l: LONGINT;
  52.  
  53. (* $CopyArrays- *)
  54.  
  55. BEGIN
  56.   l:= S.Length(cmdStr);
  57.   IF l <= 27 THEN       (* remove quotes *)
  58.     WHILE (l > 2) & (cmdStr[0] = '"') OR (cmdStr[0] = "'") OR (cmdStr[0] = "`") DO
  59.       DEC(l, 2);
  60.       K.Copy(cmdStr, 1, cmdStr, 0, l);
  61.       cmdStr[l]:= 0X;
  62.     END;
  63.     IF Util.Stricmp(cmdStr, "Set INSERT TOGGLE") = 0 THEN
  64.       insertItem:= id;
  65.     ELSIF Util.Stricmp(cmdStr, "Set AUTOINDENT TOGGLE") = 0 THEN
  66.       autoIndentItem:= id;
  67.     ELSIF Util.Stricmp(cmdStr, "Set WORDWRAP TOGGLE") = 0 THEN
  68.       wordWrapItem:= id;
  69.     ELSIF Util.Stricmp(cmdStr, "Set ICONS TOGGLE") = 0 THEN
  70.       iconsItem:= id;
  71.     ELSIF Util.Stricmp(cmdStr, "Set CLEANLINES TOGGLE") = 0 THEN
  72.       cleanLinesItem:= id;
  73.     END;
  74.   END;
  75. END Register;
  76.  
  77. PROCEDURE AddItem* (title, shortCut, cmdStr: ARRAY OF CHAR; isFile: BOOLEAN);
  78.  
  79. VAR
  80.   string: K.DynString;
  81.  
  82. (* $CopyArrays- *)
  83.  
  84. BEGIN
  85.   NEW(string, S.Length(cmdStr) + 1);
  86.   COPY(cmdStr, string^);
  87.   menuInfo.Put(CN.CreateNode(string, K.undef, isFile, FALSE),
  88.                IO.AddItem(title, shortCut, DoMenu));
  89. END AddItem;
  90.  
  91. PROCEDURE AddSubItem* (title, shortCut, cmdStr: ARRAY OF CHAR; isFile: BOOLEAN);
  92.  
  93. VAR
  94.   string: K.DynString;
  95.  
  96. (* $CopyArrays- *)
  97.  
  98. BEGIN
  99.   NEW(string, S.Length(cmdStr) + 1);
  100.   COPY(cmdStr, string^);
  101.   menuInfo.Put(CN.CreateNode(string, K.undef, isFile, FALSE),
  102.                IO.AddSub(title, shortCut, DoMenu));
  103. END AddSubItem;
  104.  
  105. PROCEDURE AddChkItem* (title, shortCut, cmdStr: ARRAY OF CHAR;
  106.                                   isFile, global, checked: BOOLEAN): INTEGER;
  107.  
  108. VAR
  109.   string: K.DynString;
  110.   id: INTEGER;
  111.  
  112. (* $CopyArrays- *)
  113.  
  114. BEGIN
  115.   NEW(string, S.Length(cmdStr) + 1);
  116.   COPY(cmdStr, string^);
  117.   id:= IO.AddChkItem(title, shortCut, DoMenu, global, checked);
  118.   menuInfo.Put(CN.CreateNode(string, K.undef, isFile, global), id);
  119.   Register(id, cmdStr);
  120.   RETURN id;
  121. END AddChkItem;
  122.  
  123. PROCEDURE AddChkSubItem* (title, shortCut, cmdStr: ARRAY OF CHAR;
  124.                                      isFile, global, checked: BOOLEAN): INTEGER;
  125.  
  126. VAR
  127.   string: K.DynString;
  128.   id: INTEGER;
  129.  
  130. (* $CopyArrays- *)
  131.  
  132. BEGIN
  133.   NEW(string, S.Length(cmdStr) + 1);
  134.   COPY(cmdStr, string^);
  135.   id:= IO.AddChkSub(title, shortCut, DoMenu, global, checked);
  136.   menuInfo.Put(CN.CreateNode(string, K.undef, isFile, global), id);
  137.   Register(id, cmdStr);
  138.   RETURN id;
  139. END AddChkSubItem;
  140.  
  141. BEGIN
  142.   insertItem:= K.undef;
  143.   autoIndentItem:= K.undef;
  144.   wordWrapItem:= K.undef;
  145.   cleanLinesItem:= K.undef;
  146.   iconsItem:= K.undef;
  147.   menuInfo.New(20, 10);
  148. END Menus.